package Server.Controller;

import java.util.*;
/**
 * Implementa il collegamento tra la classe osservata session e gli osservatori interessati.
 * Questa classe implementa parte del pattern GoF Observer.
 * @author Gruppo 6
 *
 */
public class CSessionSubject {

		protected List<CSessionObserver> observers = new ArrayList<CSessionObserver>();
		/**
		 * Restituisce tutti quanti gli osservatori della classe osservata Session
		 * @return
		 */
		public List<CSessionObserver> getObservers() {
			return observers;
		}
		public void setObservers(List<CSessionObserver> observers) {
			this.observers = observers;
		}
		/**
		 * Aggiunge un osservatore da gestire
		 * @param observer
		 */
		public void attach(CSessionObserver observer)
		{
			observers.add(observer);
		}
		/**
		 * Rimuove un osservatore da gestire
		 * @param observer
		 */
		public void detach(CSessionObserver observer)
		{
			try 
			{
				observers.remove(observer);
			} 
			catch (Exception e) 
			{ ; }
		}
		/**
		 * Notifica il cambiamento dell'oggetto Session a tutti i suoi osservatori
		 */
		public void changeNotify()
		{
			List<CSessionObserver> listatemp= observers.subList(0,observers.size());
				for(CSessionObserver obs : listatemp)
				{
					obs.update();
				}
			
		}
		
}
